package ejemplo.componentes.interfaces;

import ejemplo.util.IForma;
import ejemplo.util.Vector2D;

/**
 * Interfaz que representa el comportamiento de un objeto colisionable.
 * @author Miguel Vicente
 */
public interface IColisionable extends IForma {

	/**
	 * Identificador de la interfaz.
	 */
	public final static String ID_INTERFAZ = "colisionable";
	/**
	 * Constante que identifica una forma cuadrada/rectangular.
	 */
	public final static int FORMA_RECTANGULAR = 0;
	/**
	 * Constante que identifica una forma circular.
	 */
	public final static int FORMA_CIRCULAR = 1;
	/**
	 * Comprueba si hay colision con otro objeto Colisionable.
	 * @param c Colisionable con el que se va a comprobar la colision
	 * @return true si hay colision, false en caso contrario
	 */
	public abstract boolean comprobarSiHayColision(IColisionable c);
	/**
	 * Devuelve un Vector2D con la penetracion de la colision de un objeto con otro. Si no hay colision
	 * devuelve el vector (0,0)
	 * @param c Colisionable con el que se va a comprobar la colision
	 * @return Vector2D
	 */
	public abstract Vector2D getPenetracionColision(IColisionable c);
	/**
	 * Gestiona el comportamiento del objeto al colisionar con otro en el eje X.
	 * @param c Objeto Colisionable con el que colisiona.
	 */
	public abstract void corregirColisionX(IColisionable c);
	/**
	 * Gestiona el comportamiento del objeto al colisionar con otro en el eje Y.
	 * @param c Objeto Colisionable con el que colisiona.
	 */
	public abstract void corregirColisionY(IColisionable c);
	
}
